import {en_US, zh_CN} from "../locale";
import zh_CN_ant from 'antd/lib/locale-provider/zh_CN';
import en_US_ant from 'antd/lib/locale-provider/en_US';
import moment from 'moment';
import 'moment/locale/zh-cn';
// import LocaleReducer from "../reducer/LocaleReducer";
import LocalDataService from "./LocalDataService";
import OptionManageService from "./OptionManageService";
// import http from "./HttpService";
// import IframeReducer from "../reducer/IframeReducer";
import Config from "../Config";
import LandReducer from "../store/reducer/LandReducer";
import { getState } from "../store/StoreUtil";


// 保存到配置管理中方便扩展
const colyst_zh_CN = OptionManageService.setItem(Config.colyst_zh_CN, zh_CN),
    colyst_en_US = OptionManageService.setItem(Config.colyst_en_US, en_US);

export default class LandService{

    // 保存到LocalDataService的key
    static LOCAL_LAND_KEY = Config.landLocalKey;

    /**
     * 从LocalDataService中初始化state中的语言名称
     * 如果LocalDataService为空则通过navigator.language判断用户浏览器语言
     */
    static getInitLang() {
        let langName = LocalDataService.getItem(this.LOCAL_LAND_KEY) || Config.initLang;
        return langName;
    }

    /**
     * 修改LocalDataService中保存的语言名称 并 更新state中的值
     * @param langName 要设置的语言名称
     */
    static change(langName) {
        moment.locale(langName === "en" ? "en" : "zh-cn");
        LocalDataService.setItem(this.LOCAL_LAND_KEY, langName);
        // 清空下载数据
        // (IframeReducer as any).clear();
        LandReducer.actions.setValue({land: langName})
        // 清除http缓存
        // http.cleanCache();
    }

    /**
     * 根据当前语言返回参数中对应的值
     * @param zhKey 中文时返回的值
     * @param enKey 英文时返回的值
     * @returns {*}
     */
    static getLangKey(zhKey, enKey){
        if(getState(LandReducer).land === "en"){
            return enKey;
        }
        return zhKey;
    }

    /**
     * 格式化多语言字符串
     * @param str 包含两种语言的字符串  中文|英文
     * @return 当前语言对应的字符串
     */
    static formatLangStr(str) {
        if(!str){
            return str;
        }
        let strArr = str.split("|");
        if(strArr.length === 2){
            return this.getLangKey(strArr[0], strArr[1]);
        }
        return str;
    }

    /**
     * 根据语言名称获取语言数据
     * @param langName 语言名称
     * @returns {*}
     */
    static getMessages(langName) {
        switch(langName){
            case 'zh':
                return colyst_zh_CN;
            case 'en':
                return colyst_en_US;
            default:
                return colyst_zh_CN;
        }
    }

    /**
     * 根据语言名称获取语言数据  ant框架内部多语言
     * @param langName 语言名称
     * @returns {*}
     */
    static getAntMessages(langName) {
        switch(langName) {
            case 'zh':
                return zh_CN_ant;
            case 'en':
                return en_US_ant;
            default:
                return zh_CN_ant;
        }
    }
}
